package com.power.powercash;

import com.db4o.query.Predicate;
import com.power.utils.Date;

/**
 *
 * @author f6036477
 */
public class ConsultaPagamento extends Predicate<Pagamento>
{

  private Pagamento pagto;

  private ConsultaDate dates;

  private ConsultaDouble doubles;

  private boolean empty = false;


  public ConsultaPagamento()
  {
    pagto = null;
    dates = new ConsultaDate();
    doubles = new ConsultaDouble();
  }


  public ConsultaPagamento(Pagamento p)
  {
    this();
    this.setPagamento(p);
  }


  public Pagamento getPagamento()
  {
    return pagto;
  }


  public void setPagamento(Pagamento p)
  {
    this.pagto = p;
  }


  public ConsultaDate getConsultaDate()
  {
    return dates;
  }
  

  public void setConsultaDate(ConsultaDate d)
  {
    this.dates = d;
  }


  public ConsultaDouble getConsultaDouble()
  {
    return doubles;
  }


  public void setConsultaDouble(ConsultaDouble d)
  {
    this.doubles = d;
  }


  public void setEmptyQuery(boolean emptyQuery)
  {
    empty = emptyQuery;
  }


  public boolean isEmptyQuery()
  {
    return empty;
  }


  @Override
  public boolean match(Pagamento p)
  {
    if(p != null && empty) return true;
    if(pagto == null || p == null)
      return false;

    boolean valor = false, emissao = false,
        futura = false, banco = false,
        moeda = false, nonull = false;

    if(pagto.getValor() != 0
        && p.getValor() != 0) {
      valor = doubles.match(p.getValor(), pagto.getValor());
      nonull = true;
    } else if(pagto.getValor() == 0)
      valor = true;

    if(pagto.getDataEmissao() != null
        && p.getDataEmissao() != null
        && dates.match(p.getDataEmissao(), pagto.getDataEmissao())) {
      emissao = true;
      nonull = true;
    } else if(pagto.getDataEmissao() == null)
      emissao = true;

    if(pagto.getDataFutura() != null
        && p.getDataFutura() != null
        && dates.match(p.getDataFutura(), pagto.getDataFutura())) {
      futura = true;
      nonull = true;
    } else if(pagto.getDataEmissao() == null)
      futura = true;

    if(pagto.getBanco() != null
        && p.getBanco() != null
        && new ConsultaBanco(pagto.getBanco()).match(p.getBanco())) {
      banco = true;
      nonull = true;
    } else if(pagto.getBanco() == null)
      banco = true;

    if(pagto.getMoeda() != null
        && p.getMoeda() != null
        && pagto.getMoeda().equals(p.getMoeda())) {
      moeda = true;
      nonull = true;
    } else if(pagto.getDataEmissao() == null)
      moeda = true;

    return valor && emissao
        && futura && banco
        && moeda && nonull;
  }

}
